// 7.4. 存储类-extern存储类
/**
 * 存储类定义 C++ 程序中变量/函数的范围（可见性）和生命周期。这些说明符放置在它们所修饰的类型之前。下面列出 C++ 程序中可用的存储类：
auto
register
static
extern
mutable
thread_local (C++11)

从 C++ 17 开始，auto 关键字不再是 C++ 存储类说明符，且 register 关键字被弃用。


翻译
register 登记簿;登记表;注册簿;声区;音区;(适合特定场合使用的)语体风格，语域
static 静止的;静态的;停滞的;静力的
extern 不住机构内的公共机构工作人员;(尤指)非住院医生，非住院的医院员工
mutable 可变的;会变的;易变的
thread_local 本地线程


extern 存储类
extern 存储类用于提供一个全局变量的引用，全局变量对所有的程序文件都是可见的。当您使用 'extern' 时，对于无法初始化的变量，会把变量名指向一个之前定义过的存储位置。

当您有多个文件且定义了一个可以在其他文件中使用的全局变量或函数时，可以在其他文件中使用 extern 来得到已定义的变量或函数的引用。可以这么理解，extern 是用来在另一个文件中声明一个全局变量或函数。

extern 修饰符通常用于当有两个或多个文件共享相同的全局变量或函数的时候，如下所示：
 * 
*/

#include <iostream>
int hp = 100;

extern void damage(void);

int main(void)
{
  int i = 0;
  while (i < 3)
  {
    damage();
    i++;
  }

  printf("-------------end----------\n");
  return 0;
}

